// taskQueue.c
#include "taskQueue.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<my_header.h>
void _taskQueue_init(_taskQueue_t *q)
{
	bzero(q, sizeof(_taskQueue_t));
}

int _taskQueue_enque(_taskQueue_t *q, task_t *task)
{
	if (!task) {
		fprintf(stderr, "task is NULL\n");
		return -1;
	}
	_taskNode_t *node = (_taskNode_t *)calloc(1, sizeof(_taskNode_t));
	if (!node) {
		perror("_taskQueue_enque calloc");
		return -1;
	}

	node->task = task;
    printf("%d\n", node->task->_clientFd);
    printf("%d\n", node->task->_cmdType);
    printf("%s\n", node->task->_data);
	if (_taskQueue_is_empty(q)) {
		q->front = node;
	} else {
		q->rear->next = node;
	}
	q->rear = node;
    if(q->rear == NULL)
    {
        printf("入队失败！\n");
    }
	++q->size;
	return 0;
}

int _taskQueue_deque(_taskQueue_t *q)
{
	if (_taskQueue_is_empty(q)) {
		fprintf(stderr, "deque in empty taskQueue\n");
		return -1;
	}

	_taskNode_t *tmp = q->front;
	q->front = q->front->next;
	if (q->size == 1) {
		q->rear = NULL;
	}
	--q->size;

	free(tmp);
	tmp = NULL;
	return 0;
}

bool _taskQueue_is_empty(_taskQueue_t *q)
{
	return q->size == 0;
}

task_t *_taskQueue_front(_taskQueue_t *q)
{
	if (_taskQueue_is_empty(q)) {
		fprintf(stderr, "get front from empty taskQueue\n");
		return NULL;
	}
	return q->front->task;
}